﻿/* Người Tạo: Mr.Chau
 * Ngày Tạo:
 * Mô Tả:
 */
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using NangLuongTieuDiemDTO.DTO;
using NangLuongTieuDiemBUS;
using NangLuongTieuDiemBUS.SDK;
using System.Text.RegularExpressions;

namespace NangLuongTieuDiemGUI.NangLuongTieuDiemUserControl
{
    public delegate void DelegateShowItem(bool _isFlag);
    public delegate void DelegateShowImportExcel();
    public partial class ucNhapSanPham : UserControl
    {
        #region "[Các biến toàn cục]"
        /// <summary>
        /// danh các sản phẩm được thêm
        /// </summary>
        private List<SanPhamDTO> sanPhamResults = new List<SanPhamDTO>();
        #endregion

        #region "[lấy loại sản phẩm chính]"

        /// <summary>
        /// lấy loại sản phẩm chính
        /// </summary>
        private enum ProductType
        {
            Pin,
            BinhAcQuy,
            BoDieuKienSac,
            ThietBiDien
        }
        /// <summary>
        /// lấy loại sản phẩm chính
        /// </summary>
        /// <param name="iType"></param>
        /// <returns></returns>
        private ProductType GetType(int iType)
        {
            ProductType objResult = ProductType.Pin;
            try {
                switch (iType)
                { 
                    
                    case 2:
                        return ProductType.BinhAcQuy;
                    case 3:
                        return ProductType.BoDieuKienSac;
                    case 4:
                        return ProductType.ThietBiDien;
                    default:
                        return ProductType.Pin;
                }

            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("GetType", ex);
            }
            return objResult;
        }
        #endregion

        #region "[Tạo event và delegate để mở usercontrol Lập Hóa đơn]"
        public delegate void ClearItem();
        public event ClearItem ItemEvent;
        public DelegateShowItem showItem = null;

        public delegate void ShowUserControl();
        public event ShowUserControl showUCEvent;
        public DelegateShowImportExcel showUcItem = null;
        #endregion

        #region "[Khai báo các biến toàn cục]"
        /// <summary>
        /// mã sản phẩm cần xóa
        /// </summary>
        int IDDelete = -1;
        #endregion

        #region "[Khởi tạo mặc đình]"
        public ucNhapSanPham()
        {
            InitializeComponent();
        }
        #endregion

        #region "[Thêm sản phẩm]"
        /// <summary>
        /// Chức năng thêm sản phẩm
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnThem_Click(object sender, EventArgs e)
        {
            try
            {
                //kiểm tra các control nhâp liệu.
                LoaiSanPhamDTO Item =(LoaiSanPhamDTO)cmbLoaiSanPham.SelectedItem;

                //đối tượng sản phẩm cần Thêm
                SanPhamDTO SanPhamInsert = new SanPhamDTO();
                SanPhamInsert.TenSanPham = txtTenSanPham.Text;
                if (txtGia.Text.Trim().Length == 0)
                {
                    ClassUtils.Utils.MassageBoxErrorOtInformation("Giá bán không được để trống","Thông báo",true);
                    return;
                }
                SanPhamInsert.Gia = double.Parse(txtGia.Text);
                SanPhamInsert.NguonNhap = txtNguonNhap.Text;
                SanPhamInsert.Xoa = false;
                SanPhamInsert.GhiChu = txtGhiChu.Text;
                SanPhamInsert.LoaiSanPhamID = (int)cmbLoaiSanPham.SelectedValue;

                switch(GetType(Item.LoaiSanPhamChinhID))
                {
                    case ProductType.BinhAcQuy:
                        //thêm sản phẩm bình acquy
                        if (txtCongSuat.Text.Trim().Length == 0)
                        {
                            ClassUtils.Utils.MassageBoxErrorOtInformation("Hệ số AH không được bỏ trống", "Thông báo", true);
                            return;
                        }
                        SanPhamInsert.CongSuat =double.Parse( txtCongSuat.Text);
                        SanPhamInsert.Vmp = double.Parse(txtThongSoKT.Text); // thêm - Cao Hoang An
                        
                        break;
                    case ProductType.BoDieuKienSac:
                        //thêm sản phẩm bộ điều khiển sạc
                        SanPhamInsert.Voc = double.Parse(txtVoc.Text);
                        SanPhamInsert.Imp = double.Parse(txtImp.Text);
                        SanPhamInsert.Vmp = double.Parse(txtVmp.Text);

                        break;
                    case ProductType.ThietBiDien:
                        if (txtThongSoKT.Text.Trim().Length == 0)
                        {
                            ClassUtils.Utils.MassageBoxErrorOtInformation("Thông số kỹ thuật không được bỏ trống","Thông báo",true);
                            return;
                        }
                        if (txtCongSuat.Text.Trim().Length == 0)
                        {
                            ClassUtils.Utils.MassageBoxErrorOtInformation("Thông tin Chất Liệu không được bỏ trống", "Thông báo", true);
                            return;
                        }
                        if (txtImp.Text.Trim().Length == 0)
                        {
                            ClassUtils.Utils.MassageBoxErrorOtInformation("Thông tin Nguồn sáng không được bỏ trống", "Thông báo", true);
                            return;
                        }
                        if(txtVmp.Text.Trim().Length==0)
                        {
                            ClassUtils.Utils.MassageBoxErrorOtInformation("Thông tin Tấm thu năng lượng không được bỏ trống", "Thông báo", true);
                            return;
                        }
                        SanPhamInsert.HinhDang = txtThongSoKT.Text;
                        SanPhamInsert.HinhDang +=" * " +txtCongSuat.Text;//chết liệu
                        SanPhamInsert.HinhDang += " * " + txtImp.Text;//nguồn sáng
                        SanPhamInsert.HinhDang += " * " + txtVmp.Text; //Tấm thu năng lượng
                         
                        
                        //thêm sản phẩm thiết bị điện
                        break;
                    default :
                        //thêm sản phẩm Pin 
                        if (txtCongSuat.Text.Trim().Length == 0)
                        {
                            ClassUtils.Utils.MassageBoxErrorOtInformation("Công suất tấm Pin không được để trống", "Thông báo", true);
                            return;
                        }
                        if (txtThongSoKT.Text.Trim().Length == 0)
                        {
                            ClassUtils.Utils.MassageBoxErrorOtInformation("Thông số kỹ thuật không được để trống", "Thông báo", true);
                            return;
                        }
                        //lấy thông tin từ thông số kỹ thuật.
                        Regex regex = new Regex(@"\d+");
                        MatchCollection mc = regex.Matches(txtThongSoKT.Text);
                        if (mc.Count == 3)
                        {
                            SanPhamInsert.Dai = double.Parse(mc[0].Value);
                            SanPhamInsert.Rong = double.Parse(mc[1].Value);
                            SanPhamInsert.Day = double.Parse(mc[2].Value);
                        }
                        else
                        {
                            ClassUtils.Utils.MassageBoxErrorOtInformation("Thông số kỹ thuật không hợp lệ", "Thông báo", true);
                            return;
                        }
                        if (txtImp.Text.Trim().Length == 0)
                        {
                            ClassUtils.Utils.MassageBoxErrorOtInformation("CĐDĐ của tấm Pin sản sinh ra ở mức thấp nhất(Imp) không được để trống", "Thông báo", true);
                            return;
                        }
                        if (txtVmp.Text.Trim().Length == 0)
                        {
                            ClassUtils.Utils.MassageBoxErrorOtInformation("Điện áp sản sinh ra ở mức cao nhất(Vmp) không được để trống", "Thông báo", true);
                            return;
                        }
                        if (txtIsc.Text.Trim().Length == 0)
                        {
                            ClassUtils.Utils.MassageBoxErrorOtInformation("CĐDĐ của tấm Pin sản sinh ra ở mức cao nhất(Isc) không được để trống", "Thông báo", true);
                            return;
                        }
                        if (txtVoc.Text.Trim().Length == 0)
                        {
                            ClassUtils.Utils.MassageBoxErrorOtInformation("Điện áp sinh ra ở mức cao nhất(Voc) không được để trống","Thông báo",true);
                            return;
                        }

                        SanPhamInsert.Voc = double.Parse(txtVoc.Text);
                        SanPhamInsert.Imp = double.Parse(txtImp.Text);
                        SanPhamInsert.Vmp = double.Parse(txtVmp.Text);
                        SanPhamInsert.CongSuat = double.Parse(txtCongSuat.Text);
                        SanPhamInsert.Isc = double.Parse(txtIsc.Text);// sua txtCongSuat thanh txtIsc - Cao hoang an
                       
                        break;
                }
                int ID = InsertProduct(SanPhamInsert);
                if (ID > 0)
                {
                    sanPhamResults.Add(SanPhamInsert);
                    LoadDataGridView();
                }

                //xóa dữ liệu trên các control nhập liệu
                ClearDataInput();
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("btnThem_Click", ex);
            }

        }
        #endregion

        #region "[Cập nhật sản phẩm]"
        private void btnCapNhat_Click(object sender, EventArgs e)
        {
            try {
                if (IDDelete > 0)
                {
                    //thực hiện cập nhật sản phẩm theo đúng loại sản phẩm.
                }
            }
           catch (Exception ex)
            {
                InSert_LoiHeThong("btnCapNhat_Click", ex);
            }
        }
        #endregion

        #region "[Xóa sản phẩm]"
        private void btnXoa_Click(object sender, EventArgs e)
        {
            try
            {
                if (IDDelete > 0)
                {

                }
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("btnXoa_Click", ex);
            }
        }
        #endregion

        #region "[Xóa thẻ]"
        private void btnXoaThe_Click(object sender, EventArgs e)
        {

            try
            {
                ClearDataInput();
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("btnXoaThe_Click", ex);
            }
        }
        #endregion

        #region "[Thoát]"
        private void btnThoat_Click(object sender, EventArgs e)
        {
            try
            {
                //if (ItemEvent != null)
                //    ItemEvent();

                if (showItem != null)
                    showItem(false);
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("btnThoat_Click", ex);
            }
        }
        #endregion

        #region "[xóa dữ liệu trên các control nhập liệu]"
        /// <summary>
        /// xóa dữ liệu trên các control nhập liệu
        /// </summary>
        private void ClearDataInput()
        {
            try
            {
                txtCongSuat.Text = txtGhiChu.Text = txtGia.Text = txtImp.Text = txtIsc.Text = txtNguonNhap.Text =
                    txtTenSanPham.Text = txtThongSoKT.Text = txtVmp.Text = txtVoc.Text = string.Empty;
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("ClearDataInput", ex);
            }
        }

        #endregion

        #region "[Load]"
        private void ucNhapSanPham_Load(object sender, EventArgs e)
        {
            try
            {
                //load danh sách các loại sản phẩm 
                ShowListProductTypeInComBoBox();

                LoadDataGridView();

                EnableButton(true);
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("ucNhapSanPham_Load", ex);
            }
           
        }

        #endregion
       
        #region "[Load danh sách các loại sản phẩm lên combobox]"
        /// <summary>
        /// Load danh sách các loại sản phẩm lên combobox
        /// </summary>
        private void ShowListProductTypeInComBoBox()
        {
            try
            {
                List<LoaiSanPhamDTO> list = NangLuongTieuDiem_Management.LoaiSanPham_GetAll().Where(p => p.Xoa == false).ToList();
                if (list.Count > 0)
                {
                    cmbLoaiSanPham.DataSource = list;
                    cmbLoaiSanPham.DisplayMember = "TenLoaiSanPham";
                    cmbLoaiSanPham.ValueMember = "ID";
                }
            }
            catch(Exception ex)
            {
                InSert_LoiHeThong("ShowListProductTypeInComBoBox", ex);
            }
        }
        #endregion

        #region "[Thêm loại sản phẩm]"
        private void btnThemLoaiSanPham_Click(object sender, EventArgs e)
        {
            try
            {
                if (ItemEvent != null)
                    ItemEvent();

                if (showItem != null)
                    showItem(true);
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("btnThemLoaiSanPham_Click", ex);
            }
        }
        #endregion

        #region "[Load control tương ứng khi chọn Loại sản phẩm cần nhập]"
        private void cmbLoaiSanPham_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                int iType = -1;
                LoaiSanPhamDTO ItemSelect = (LoaiSanPhamDTO)cmbLoaiSanPham.SelectedItem;
                if (ItemSelect != null)
                {
                    if (ItemSelect.LoaiSanPhamChinhID > 0)
                        iType = ItemSelect.LoaiSanPhamChinhID;

                    if (iType > 0)
                        EnableControl(iType);
                }

            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("cmbLoaiSanPham_SelectedIndexChanged", ex);
            }
        }
        #endregion

        #region "[Enable control tương ứng khi chọn loại sản phẩm cần nhập]"
        /// <summary>
        /// Enable control tương ứng khi chọn loại sản phẩm cần nhập
        /// </summary>
        /// <param name="_iType">1:Pin,2: Bình acquy, 3: Bộ điều khiển sạc, 4: thiết bị điện </param>
        private void EnableControl(int _iType)
        {
            try
            {
                switch (_iType)
                {
                    case 1:
                        txtTenSanPham.Enabled = txtCongSuat.Enabled = txtThongSoKT.Enabled = txtImp.Enabled =
                        txtVmp.Enabled = txtIsc.Enabled = txtVoc.Enabled = txtNguonNhap.Enabled = txtGia.Enabled =
                        txtGhiChu.Enabled = true;
                        labelControl3.Text = "Công Suất";
                        labelControl5.Text = "Imp";
                        labelControl4.Text = "Thông số kỹ thuật";
                        labelControl6.Text = "Vmp";
                        labelControl11.Text = "Ghi Chú";
                        break;
                    case 2:
                        txtGia.Enabled = txtTenSanPham.Enabled = txtGia.Enabled = txtCongSuat.Enabled = txtGia.Enabled = txtGhiChu.Enabled = txtNguonNhap.Enabled = true;
                        labelControl3.Text = "Số AH";
                        labelControl4.Text = "Hiệu Điện Thế";
                        txtImp.Enabled = txtVmp.Enabled = txtIsc.Enabled = txtVoc.Enabled =  txtGhiChu.Enabled = false;
                        break;
                        
                    case 3:
                        txtTenSanPham.Enabled = txtCongSuat.Enabled = txtThongSoKT.Enabled = txtImp.Enabled = txtGhiChu.Enabled = txtGia.Enabled = txtNguonNhap.Enabled = true;
                        labelControl3.Text = "V-min:";
                        labelControl4.Text = "V-max:";
                        labelControl5.Text = "I(A):";
                        txtVmp.Enabled = txtIsc.Enabled = txtVoc.Enabled = false;
                        break;
                        
                    case 4:
                        labelControl3.Text = "Chất liệu";
                        labelControl11.Text = "Ưu điểm";
                        labelControl5.Text = "Nguồn\r\nsáng";
                        labelControl6.Text = "Tấm thu\r\nnăng lượng";
                        labelControl4.Text = "Thông số kỹ thuật";
                        txtVmp.Enabled = txtImp.Enabled = txtThongSoKT.Enabled = txtTenSanPham.Enabled = txtCongSuat.Enabled = txtGia.Enabled = txtNguonNhap.Enabled = txtGhiChu.Enabled = true;
                        txtIsc.Enabled = txtVoc.Enabled = false;
                        break;
                }


            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("EnableControl", ex);
            }
        }
        #endregion

        #region "[Đánh số thứ tự]"
        private void gridView1_CustomDrawCell(object sender, DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e)
        {
            try
            {
                if (e.Column.Name == "colSTT")
                    e.DisplayText = (e.RowHandle + 1).ToString();
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("gridView1_CustomDrawCell", ex);
            }
        }
        #endregion

        #region "[Load thông tin của sản phầm được chọn lên các control nhập liệu - chưa xong]"
        /// <summary>
        /// Load thông tin của sản phầm được chọn lên các control nhập liệu
        /// </summary>
        /// <param name="Item">Đối tượng sản phẩm cần load thông tin</param>
        private void LoadInfomationInControlInput(SanPhamDTO Item)
        {
            try { 
               
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("LoadInfomationInControlInput", ex);
            }
        }
        #endregion

        #region "[SetStateButton]"
        /// <summary>
        /// SetStateButton
        /// </summary>
        /// <param name="_isFlag">true: chỉ cho trạng thái thêm, false: cho trạng thái cập nhật và sửa</param>
        private void SetStateButton(bool _isFlag)
        {
            try {
                btnCapNhat.Enabled = btnXoa.Enabled = _isFlag;
                btnThem.Enabled = !_isFlag;
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("SetStateButton", ex);
            }
        }
        #endregion

        #region "[Thêm Sản phẩm]"
        /// <summary>
        /// Thêm Sản phẩm
        /// </summary>
        /// <param name="SanPhamInsert"></param>
        private int InsertProduct(SanPhamDTO SanPhamInsert)
        {
            int IDResult = -1;
            try 
            {
                IDResult = NangLuongTieuDiem_Management.SanPham_Insert(SanPhamInsert);
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("InsertProduct", ex);
            }
            return IDResult;
        }
        #endregion

        #region "[Load DataGridview]"
        /// <summary>
        /// Load DataGridview
        /// </summary>
        private void LoadDataGridView()
        {
            try {
                bool isShowPin = false, isShowAcquy = false, isShowDieuKhienSac = false, isShowThietBiDien = false;
               
                //hiển thị coltrol Pin.
                //splitContainerControl1.Panel2.Controls.Clear();
                ucLuoiHienThiPinNangLuong ucPin = new ucLuoiHienThiPinNangLuong();
                //ucPin.Dock = DockStyle.Fill;
                //splitContainerControl1.Panel2.Controls.Add(ucPin);

                List<SanPhamDTO> listPin = new List<SanPhamDTO>();
                List<SanPham_AcquySDK> listAcquy = new List<SanPham_AcquySDK>();
                List<SanPham_BoDieuKhienSacSDK> listBoDieuKhien = new List<SanPham_BoDieuKhienSacSDK>();
                List<SanPham_ThietBiDienSDK> listThietBiDien = new List<SanPham_ThietBiDienSDK>();
                foreach (SanPhamDTO Item in sanPhamResults)
                {

                    switch (GetType(NangLuongTieuDiem_Management.LoaiSanPham_SelectByPrimaryKey(Item.LoaiSanPhamID).LoaiSanPhamChinhID))
                    { 
                        case ProductType.Pin:
                            SanPhamDTO ItemPin = new SanPhamDTO();
                            listPin.Add(Item);
                            break;
                        case ProductType.BinhAcQuy:
                            SanPham_AcquySDK AcquyItem = new SanPham_AcquySDK();
                            AcquyItem.LoaiSanPhamID = Item.LoaiSanPhamID;
                            AcquyItem.GhiChu = Item.GhiChu;
                            AcquyItem.Gia = Item.Gia;
                            AcquyItem.ID = Item.ID;
                            AcquyItem.NguonNhap = Item.NguonNhap;
                            AcquyItem.SoAH = Item.CongSuat;
                            AcquyItem.HieuDienThe = Item.Vmp; //thieu cai nay - Cao Hoang An
                            AcquyItem.Xoa = Item.Xoa;

                            listAcquy.Add(AcquyItem);
                            break;
                        case ProductType.BoDieuKienSac:

                            SanPham_BoDieuKhienSacSDK DieuKhienItem = new SanPham_BoDieuKhienSacSDK();
                            DieuKhienItem.Ampe = Item.Imp;
                            DieuKhienItem.LoaiSanPhamID = Item.LoaiSanPhamID;
                            DieuKhienItem.GhiChu = Item.GhiChu;
                            DieuKhienItem.Gia = Item.Gia;
                            DieuKhienItem.ID = Item.ID;
                            DieuKhienItem.NguonNhap = Item.NguonNhap;
                            DieuKhienItem.VMax = Item.Voc;
                            DieuKhienItem.VMin = Item.Vmp;
                            DieuKhienItem.Xoa = Item.Xoa;

                            listBoDieuKhien.Add(DieuKhienItem);
                            break;
                        case ProductType.ThietBiDien:
                            SanPham_ThietBiDienSDK ThietBiDienItem = new SanPham_ThietBiDienSDK();
                            ThietBiDienItem.GhiChu = Item.GhiChu;
                            ThietBiDienItem.LoaiSanPhamID = Item.LoaiSanPhamID;
                            ThietBiDienItem.Gia = Item.Gia;
                            ThietBiDienItem.ID = Item.ID;
                            ThietBiDienItem.NguonNhap = Item.NguonNhap;
                            ThietBiDienItem.TenThietBi = Item.TenSanPham;
                            ThietBiDienItem.Xoa = Item.Xoa;
                          
                            Regex r = new Regex(@"\*");
                            MatchCollection mcr = r.Matches(Item.HinhDang);
                            if (mcr.Count > 0)
                            {
                                ThietBiDienItem.ThongSoKyThuat = Item.HinhDang.Substring(0, mcr[0].Index).Trim();
                                ThietBiDienItem.ChatLieu=Item.HinhDang.Substring(mcr[0].Index+1,(mcr[1].Index-mcr[0].Index-1)).Trim();
                                ThietBiDienItem.NguonSang = Item.HinhDang.Substring(mcr[1].Index+1,(mcr[2].Index-mcr[1].Index-1)).Trim();
                                ThietBiDienItem.TamThuNangLuong = Item.HinhDang.Substring(mcr[2].Index+1).Trim();
                            }

                            listThietBiDien.Add(ThietBiDienItem);
                            break;

                    }

                }
                if (listPin.Count > 0)
                {
                    isShowPin = true;

                    splitContainerControl1.Panel2.Controls.Clear();
                    ucPin = new ucLuoiHienThiPinNangLuong(listPin);
                    ucPin.Dock = DockStyle.Fill;
                    splitContainerControl1.Panel2.Controls.Add(ucPin);
                }
                if (listAcquy.Count > 0)
                {
                    isShowAcquy = true;
                    if (isShowPin)
                    {
                        splitContainerControl1.Panel2.Controls.Clear();
                        SplitContainer frm = new SplitContainer();
                        frm.Dock = DockStyle.Fill;
                        frm.Orientation = Orientation.Horizontal;
                        //pannel 1
                        ucPin = new ucLuoiHienThiPinNangLuong (listPin);
                        ucPin.Dock = DockStyle.Fill;
                        frm.Panel1.Controls.Add(ucPin);
                        
                        //panel 2
                        ucLuoiHienThiPinNangLuong ucAcqui = new ucLuoiHienThiPinNangLuong(listAcquy);
                        ucAcqui.Dock = DockStyle.Fill;
                        frm.Panel2.Controls.Add(ucAcqui);
                        splitContainerControl1.Panel2.Controls.Add(frm);
                    }
                    else
                    {
                        splitContainerControl1.Panel2.Controls.Clear();
                        ucLuoiHienThiPinNangLuong ucAcqui = new ucLuoiHienThiPinNangLuong(listAcquy);
                        ucAcqui.Dock = DockStyle.Fill;
                        splitContainerControl1.Panel2.Controls.Add(ucAcqui);
                    }
                }
                if (listBoDieuKhien.Count > 0)
                {
                    isShowDieuKhienSac = true;
                    if (isShowPin && isShowAcquy)
                    { 
                        //add 3 pannel
                        splitContainerControl1.Panel2.Controls.Clear();
                        SplitContainer frm2 = new SplitContainer();
                        frm2.Dock = DockStyle.Fill;
                        frm2.Orientation = Orientation.Horizontal;
                        ucLuoiHienThiPinNangLuong ucAcquy =new ucLuoiHienThiPinNangLuong (listAcquy);
                        ucAcquy.Dock = DockStyle.Fill;
                        frm2.Panel1.Controls.Add(ucAcquy);

                        ucLuoiHienThiPinNangLuong ucDieuKhienSac = new ucLuoiHienThiPinNangLuong(listBoDieuKhien);
                        ucDieuKhienSac.Dock = DockStyle.Fill;
                        frm2.Panel2.Controls.Add(ucDieuKhienSac);

                        SplitContainer frm =new SplitContainer ();
                        frm.Dock = DockStyle.Fill;
                        frm.Orientation = Orientation.Horizontal;//cho panel nam doc
                        ucPin =new ucLuoiHienThiPinNangLuong (listPin);
                        ucPin.Dock = DockStyle.Fill;
                        frm.Panel1.Controls.Add(ucPin);

                        frm.Panel2.Controls.Add(frm2);
                        splitContainerControl1.Panel2.Controls.Clear();
                        splitContainerControl1.Panel2.Controls.Add(frm);
                         
                    }
                    else if (isShowPin)
                    { 
                        //add 2 pannel
                        splitContainerControl1.Panel2.Controls.Clear();
                        SplitContainer frm2 = new SplitContainer();
                        frm2.Dock = DockStyle.Fill;
                        frm2.Orientation = Orientation.Horizontal;
                        ucPin = new ucLuoiHienThiPinNangLuong(listPin);
                        ucPin.Dock = DockStyle.Fill;
                        frm2.Panel1.Controls.Add(ucPin);

                        ucLuoiHienThiPinNangLuong ucDieuKhienSac = new ucLuoiHienThiPinNangLuong(listBoDieuKhien);
                        ucDieuKhienSac.Dock = DockStyle.Fill;
                        frm2.Panel2.Controls.Add(ucDieuKhienSac);
                        splitContainerControl1.Panel2.Controls.Add(frm2);
                    }
                    else if (isShowAcquy)
                    {
                        //add 2 pannel
                        splitContainerControl1.Panel2.Controls.Clear();
                        SplitContainer frm2 = new SplitContainer();
                        frm2.Dock = DockStyle.Fill;
                        frm2.Orientation = Orientation.Horizontal;
                        ucLuoiHienThiPinNangLuong ucAcquy = new ucLuoiHienThiPinNangLuong(listAcquy);
                        ucAcquy.Dock = DockStyle.Fill;
                        frm2.Panel1.Controls.Add(ucAcquy);

                        ucLuoiHienThiPinNangLuong ucDieuKhienSac = new ucLuoiHienThiPinNangLuong(listBoDieuKhien);
                        ucDieuKhienSac.Dock = DockStyle.Fill;
                        frm2.Panel2.Controls.Add(ucDieuKhienSac);
                        splitContainerControl1.Panel2.Controls.Add(frm2);
                    }
                    else
                    { 
                        //1 pannel
                        splitContainerControl1.Panel2.Controls.Clear();
                        ucLuoiHienThiPinNangLuong ucDieuKhienSac = new ucLuoiHienThiPinNangLuong(listBoDieuKhien);
                        ucDieuKhienSac.Dock = DockStyle.Fill;
                        splitContainerControl1.Panel2.Controls.Add(ucDieuKhienSac);
                    }
                }
                if (listThietBiDien.Count > 0)
                {
                    isShowThietBiDien = true;
                    if (isShowAcquy && isShowPin && isShowDieuKhienSac)
                    { 
                        //add 4 pannel
                        SplitContainer frm3 = new SplitContainer();
                        frm3.Dock = DockStyle.Fill;
                        frm3.Orientation = Orientation.Horizontal;
                        ucLuoiHienThiPinNangLuong ucDieuKhienSac = new ucLuoiHienThiPinNangLuong(listBoDieuKhien);
                        ucDieuKhienSac.Dock = DockStyle.Fill;
                        frm3.Panel1.Controls.Add(ucDieuKhienSac);

                        ucLuoiHienThiPinNangLuong ucThietBiDien = new ucLuoiHienThiPinNangLuong(listThietBiDien);
                        ucThietBiDien.Dock = DockStyle.Fill;
                        frm3.Panel2.Controls.Add(ucThietBiDien);

                        SplitContainer frm2 = new SplitContainer();
                        frm2.Dock = DockStyle.Fill;
                        frm2.Orientation = Orientation.Horizontal;
                        ucLuoiHienThiPinNangLuong ucAcquy = new ucLuoiHienThiPinNangLuong(listAcquy);
                        ucAcquy.Dock = DockStyle.Fill;
                        frm2.Panel1.Controls.Add(ucAcquy);

                        frm2.Panel2.Controls.Add(frm3);

                        SplitContainer frm =new SplitContainer ();
                        frm.Dock = DockStyle.Fill;
                        frm.Orientation = Orientation.Horizontal;
                        ucPin =new ucLuoiHienThiPinNangLuong (listPin);
                        ucPin.Dock = DockStyle.Fill;
                        frm.Panel1.Controls.Add(ucPin);
                        
                        frm.Panel2.Controls.Add(frm2);

                        splitContainerControl1.Panel2.Controls.Add(frm);
                    }
                    else if (isShowPin && isShowAcquy)
                    {
                        //add 3 pannel
                        splitContainerControl1.Panel2.Controls.Clear();
                        SplitContainer frm2 = new SplitContainer();
                        frm2.Dock = DockStyle.Fill;
                        frm2.Orientation = Orientation.Horizontal;
                        ucLuoiHienThiPinNangLuong ucAcquy = new ucLuoiHienThiPinNangLuong(listAcquy);
                        ucAcquy.Dock = DockStyle.Fill;
                        frm2.Panel1.Controls.Add(ucAcquy);

                        ucLuoiHienThiPinNangLuong ucThietBiDien = new ucLuoiHienThiPinNangLuong(listThietBiDien);
                        ucThietBiDien.Dock = DockStyle.Fill;
                        frm2.Panel2.Controls.Add(ucThietBiDien);

                        SplitContainer frm = new SplitContainer();
                        frm.Dock = DockStyle.Fill;
                        frm.Orientation = Orientation.Horizontal;
                        ucPin = new ucLuoiHienThiPinNangLuong(listPin);
                        ucPin.Dock = DockStyle.Fill;
                        frm.Panel1.Controls.Add(ucPin);

                        frm.Panel2.Controls.Add(frm2);

                        splitContainerControl1.Panel2.Controls.Clear();
                        splitContainerControl1.Panel2.Controls.Add(frm);
                    }
                    else if (isShowPin && isShowDieuKhienSac)
                    {
                        //add 3 pannel
                        splitContainerControl1.Panel2.Controls.Clear();
                        SplitContainer frm2 = new SplitContainer();
                        frm2.Dock = DockStyle.Fill;
                        frm2.Orientation = Orientation.Horizontal;
                        ucLuoiHienThiPinNangLuong ucDieuKhienSac = new ucLuoiHienThiPinNangLuong(listBoDieuKhien);
                        ucDieuKhienSac.Dock = DockStyle.Fill;
                        frm2.Panel1.Controls.Add(ucDieuKhienSac);

                        ucLuoiHienThiPinNangLuong ucThietBiDien = new ucLuoiHienThiPinNangLuong(listThietBiDien);
                        ucThietBiDien.Dock = DockStyle.Fill;
                        frm2.Panel2.Controls.Add(ucThietBiDien);

                        SplitContainer frm = new SplitContainer();
                        frm.Dock = DockStyle.Fill;
                        frm.Orientation = Orientation.Horizontal;
                        ucPin = new ucLuoiHienThiPinNangLuong(listPin);
                        ucPin.Dock = DockStyle.Fill;
                        frm.Panel1.Controls.Add(ucPin);

                        frm.Panel2.Controls.Add(frm2);
                        splitContainerControl1.Panel2.Controls.Clear();
                        splitContainerControl1.Panel2.Controls.Add(frm);
                    }
                    else if (isShowAcquy && isShowDieuKhienSac)
                    {
                        //add 3 pannel 
                        splitContainerControl1.Panel2.Controls.Clear();
                        SplitContainer frm2 = new SplitContainer();
                        frm2.Dock = DockStyle.Fill;
                        frm2.Orientation = Orientation.Horizontal;
                        ucLuoiHienThiPinNangLuong ucDieuKhienSac = new ucLuoiHienThiPinNangLuong(listBoDieuKhien);
                        ucDieuKhienSac.Dock = DockStyle.Fill;
                        frm2.Panel1.Controls.Add(ucDieuKhienSac);

                        ucLuoiHienThiPinNangLuong ucThietBiDien = new ucLuoiHienThiPinNangLuong(listThietBiDien);
                        ucThietBiDien.Dock = DockStyle.Fill;
                        frm2.Panel2.Controls.Add(ucThietBiDien);

                        SplitContainer frm = new SplitContainer();
                        frm.Dock = DockStyle.Fill;
                        frm.Orientation = Orientation.Horizontal;
                        ucLuoiHienThiPinNangLuong ucAcquy = new ucLuoiHienThiPinNangLuong(listAcquy);
                        ucAcquy.Dock = DockStyle.Fill;
                        frm.Panel1.Controls.Add(ucAcquy);

                        frm.Panel2.Controls.Add(frm2);
                        splitContainerControl1.Panel2.Controls.Clear();
                        splitContainerControl1.Panel2.Controls.Add(frm);
                    }
                    else if (isShowPin)
                    {
                        //add 2 pannel
                        splitContainerControl1.Panel2.Controls.Clear();
                        SplitContainer frm2 = new SplitContainer();
                        frm2.Dock = DockStyle.Fill;
                        frm2.Orientation = Orientation.Horizontal;
                        ucLuoiHienThiPinNangLuong ucThietBiDien = new ucLuoiHienThiPinNangLuong(listThietBiDien);
                        ucThietBiDien.Dock = DockStyle.Fill;
                        frm2.Panel1.Controls.Add(ucThietBiDien);

                        ucPin = new ucLuoiHienThiPinNangLuong(listPin);
                        ucPin.Dock = DockStyle.Fill;
                        frm2.Panel2.Controls.Add(ucPin);
                        splitContainerControl1.Panel2.Controls.Add(frm2);

                    }
                    else if (isShowAcquy)
                    {
                        //add 2 pannel
                        splitContainerControl1.Panel2.Controls.Clear();
                        SplitContainer frm2 = new SplitContainer();
                        frm2.Dock = DockStyle.Fill;
                        frm2.Orientation = Orientation.Horizontal;
                        ucLuoiHienThiPinNangLuong ucThietBiDien = new ucLuoiHienThiPinNangLuong(listThietBiDien);
                        ucThietBiDien.Dock = DockStyle.Fill;
                        frm2.Panel1.Controls.Add(ucThietBiDien);

                        ucLuoiHienThiPinNangLuong ucAcquy = new ucLuoiHienThiPinNangLuong(listAcquy);
                        ucAcquy.Dock = DockStyle.Fill;
                        frm2.Panel2.Controls.Add(ucAcquy);
                        splitContainerControl1.Panel2.Controls.Add(frm2);
                    }
                    else if (isShowDieuKhienSac)
                    {
                        //add 2 pannel
                        splitContainerControl1.Panel2.Controls.Clear();
                        SplitContainer frm2 = new SplitContainer();
                        frm2.Dock = DockStyle.Fill;
                        frm2.Orientation = Orientation.Horizontal;
                        ucLuoiHienThiPinNangLuong ucThietBiDien = new ucLuoiHienThiPinNangLuong(listThietBiDien);
                        ucThietBiDien.Dock = DockStyle.Fill;
                        frm2.Panel1.Controls.Add(ucThietBiDien);

                        ucLuoiHienThiPinNangLuong ucDieuKhienSac = new ucLuoiHienThiPinNangLuong(listBoDieuKhien);
                        ucDieuKhienSac.Dock = DockStyle.Fill;
                        frm2.Panel2.Controls.Add(ucDieuKhienSac);
                        splitContainerControl1.Panel2.Controls.Add(frm2);
                    }
                    else {
                        //add 1 pannel
                        splitContainerControl1.Panel2.Controls.Clear();
                        ucLuoiHienThiPinNangLuong ucThietBiDien = new ucLuoiHienThiPinNangLuong(listThietBiDien);
                        ucThietBiDien.Dock = DockStyle.Fill;
                        splitContainerControl1.Panel2.Controls.Add(ucThietBiDien);
                    }
                }
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("LoadDataGridView", ex);
            }
        }
        #endregion

        #region "[Nhập giá bán]"
        private void txtGia_KeyPress(object sender, KeyPressEventArgs e)
        {
            try {
                if (!char.IsControl(e.KeyChar) && !char.IsNumber(e.KeyChar))
                    e.Handled = true;
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("txtGia_KeyPress", ex);
            }
        }
        #endregion

        #region "[Enable các button tuong ứng]"
        /// <summary>
        /// Enable các button tuong ứng
        /// </summary>
        /// <param name="_isFlag">true: Thêm, false: xóa sửa</param>
        private void EnableButton(bool _isFlag)
        {
            try {
                btnThem.Enabled = _isFlag;
                btnCapNhat.Enabled = btnXoa.Enabled = !_isFlag;
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong(" EnableButton", ex);
            }
        }
        #endregion

        #region "[không cho nhập số]"
        private void txtCongSuat_KeyPress(object sender, KeyPressEventArgs e)
        {
            try { 
                switch(GetType(NangLuongTieuDiem_Management.LoaiSanPham_SelectByPrimaryKey((int)cmbLoaiSanPham.SelectedValue).LoaiSanPhamChinhID))
                {
                    case ProductType.BoDieuKienSac:
                        break;
                    case ProductType.ThietBiDien:
                        break;
                    default:
                        if (!char.IsNumber(e.KeyChar) && !char.IsControl(e.KeyChar))
                            e.Handled = true;
                        break;
                }
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("txtCongSuat_KeyPress", ex);
            }
        }
        private void txtThongSoKT_KeyPress(object sender, KeyPressEventArgs e)
        {
            try
            {
                switch (GetType(NangLuongTieuDiem_Management.LoaiSanPham_SelectByPrimaryKey((int)cmbLoaiSanPham.SelectedValue).LoaiSanPhamChinhID))
                {
                    case ProductType.Pin:
                        break;
                    case ProductType.BoDieuKienSac:
                        break;
                    default:
                        if (!char.IsNumber(e.KeyChar) && !char.IsControl(e.KeyChar))
                            e.Handled = true;
                        break;
                }
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("txtThongSoKT_KeyPress", ex);
            }
        }

        private void txtImp_KeyPress(object sender, KeyPressEventArgs e)
        {
            try
            {
                if (GetType(NangLuongTieuDiem_Management.LoaiSanPham_SelectByPrimaryKey((int)cmbLoaiSanPham.SelectedValue).LoaiSanPhamChinhID) == ProductType.Pin)
                {
                    if (!char.IsNumber(e.KeyChar) && !char.IsControl(e.KeyChar))
                        e.Handled = true;
                }
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("txtImp_KeyPress", ex);
            }
        }

        private void txtVmp_KeyPress(object sender, KeyPressEventArgs e)
        {
            try
            {
                if (GetType(NangLuongTieuDiem_Management.LoaiSanPham_SelectByPrimaryKey((int)cmbLoaiSanPham.SelectedValue).LoaiSanPhamChinhID) == ProductType.Pin)
                {
                    if (!char.IsNumber(e.KeyChar) && !char.IsControl(e.KeyChar))
                        e.Handled = true;
                }
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("txtVmp_KeyPress", ex);
            }
        }

        private void txtIsc_KeyPress(object sender, KeyPressEventArgs e)
        {
            try
            {
                if (GetType(NangLuongTieuDiem_Management.LoaiSanPham_SelectByPrimaryKey((int)cmbLoaiSanPham.SelectedValue).LoaiSanPhamChinhID) == ProductType.Pin)
                {
                    if (!char.IsNumber(e.KeyChar) && !char.IsControl(e.KeyChar))
                        e.Handled = true;
                }
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("txtIsc_KeyPress", ex);
            }
        }

        private void txtVoc_KeyPress(object sender, KeyPressEventArgs e)
        {
            try
            {
                if (GetType(NangLuongTieuDiem_Management.LoaiSanPham_SelectByPrimaryKey((int)cmbLoaiSanPham.SelectedValue).LoaiSanPhamChinhID) == ProductType.Pin)
                {
                    if (!char.IsNumber(e.KeyChar) && !char.IsControl(e.KeyChar))
                        e.Handled = true;
                }
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("txtVoc_KeyPress", ex);
            }
        }
        #endregion

        #region "[Nhập file excell]"
        private void btnNhapTuExcel_Click(object sender, EventArgs e)
        {
            try {
                //if (showUCEvent != null)
                //    showUCEvent();

                if (showUcItem != null)
                    showUcItem();
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("btnNhapTuExcel_Click", ex);
            }
        }
        #endregion

        #region "[Hàm insert lỗi hệ thống]"
        public void InSert_LoiHeThong(string TenHam, Exception ex)
        {
            LoiHeThongDTO lhtDto = new LoiHeThongDTO();
            lhtDto.TenLoi = ex.Message.ToString();
            lhtDto.NgayTao = DateTime.Now;
            lhtDto.TenHamBiLoi = "ucNhapSanPham_" + TenHam;
            lhtDto.SuaLoi = false;
            lhtDto.GhiChu = "";
            NangLuongTieuDiem_Management.LoiHeThong_Insert(lhtDto);
            MessageBox.Show(lhtDto.TenLoi);
        }
        #endregion
    }
}
